
    <html lang="zh-cn">
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="content-type" />
    <link href="F:\v_awjliu\BKDocs\ZH/default.css" rel="stylesheet">
    </head>
    <body>
    <h1 id="_1">产品简介</h1>
<p>蓝鲸配置平台是一款面向应用的 CMDB，在 ITIL 体系里，CMDB 是构建其它流程的基石，而在蓝鲸智云体系里，配置平台就扮演着基石的角色，为应用提供了各种运维场景的配置数据服务。它是企业 IT 管理体系的核心，通过提供配置管理服务，以数据和模型相结合映射应用间的关系，保证数据的准确和一致性；并以整合的思路推进，最终面向应用消费，发挥配置服务的价值。</p>
<p>目前，蓝鲸配置平台已正式对外开源，GitHub 地址： <a href="https://github.com/Tencent/bk-cmdb">https://github.com/Tencent/bk-cmdb</a></p>
<p><img alt="fuction" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/function.png" /></p><h1 id="_1">术语解释</h1>
<ul>
<li>
<p><strong>业务</strong>：可以理解为项目，是蓝鲸配置平台的基础对象，可以定义业务角色分工（如产品、测试、开发、运维）、业务的生命周期等。在作业平台、监控、标准运维等系统中，均以已有业务为基础进行运作。</p>
</li>
<li>
<p><strong>集群</strong>：用于区分一个业务的不同环境，或者同一个环境的多个部署区域。常见定义有，按照环境类型区分：正式集群、测试集群。按照区域区分：华东区、华北区。</p>
</li>
<li>
<p><strong>模块</strong>：模块是业务拓扑管理的最小单位，通常用于标识一组固化的进程集合，例如 DB、DR、Login、Web 等。</p>
</li>
<li>
<p><strong>空闲机</strong>：通过资源池分配到业务默认会放到空闲机模块中，在空闲机模块下即被定位为没有被实际使用的主机资源。</p>
</li>
<li>
<p><strong>故障机</strong>：当主机在实际应用中被发现有异常，建议转移到“故障机”模块中进行标识，修复以后可以转移到空闲机或者再划分到业务模块中。</p>
</li>
<li>
<p><strong>云区域</strong>：云区域是主机内网的逻辑区域划分，跨云区域之间的主机不可以通过内网直接互相访问，且 IP 可重复。默认主机属于直连区域。</p>
</li>
<li>
<p><strong>模型</strong>：模型是对同类配置实例进行标准格式的定义，例如主机和机房有不同的配置记录需要：主机需要包含固资编号，机房需要包含运营商信息，可以定义主机、机房两个模型，以保证相关配置录入 CMDB 的时候必须包含所需信息。除了属性列表以外，模型还能够定义唯一性校验、可关联性等。</p>
</li>
<li>
<p><strong>模型分组</strong>：模型分组可以帮助对模型进行归类，便于查询和理解，例如通常会把交换机、路由器、硬件防火墙归类到网络设备分组下。</p>
</li>
<li>
<p><strong>关联类型</strong>：模型关联关系的分类，如主机与交换机、路由之间的关系可以分类为“上联”类型，软件与主机之间的关系是 “运行” 等。</p>
</li>
<li>
<p><strong>模型关联</strong>：模型之间的可关联性定义。</p>
</li>
<li>
<p><strong>关联关系</strong>：实例关联是代表实例之间的关联关系，例如主机“上联”了一个交换机。在 CMDB 中，这种关系可以通过网状可视化展示。</p>
</li>
<li>
<p><strong>实例</strong>：也称为配置实例，CMDB 每条有意义的记录主体都是一个配置实例，例如一个交换机、一个主机等。</p>
</li>
<li>
<p><strong>动态分组</strong>：动态分组主要用于定义常用的条件查询，在使用作业平台或标准运维时可以根据动态分组快速检索目标主机。</p>
</li>
<li>
<p><strong>事件推送</strong>：事件推送主要指当配置信息发生变化的时候，实时通知到关联的系统中。目前支持按照模型分类进行推送配置。</p>
</li>
</ul><h1 id="_1">产品架构</h1>
<p><img alt="产品架构" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/Architecture/产品架构.png" />
<center>图1.配置平台产品构架</center></p><h1 id="_1">特点及优势</h1>
<ul>
<li>自定义配置模型（CI）管理</li>
<li>Web 可视化的业务拓扑</li>
<li>全面的 API 服务</li>
<li>自动发现和主机快照</li>
<li>支持跨云管理</li>
<li>动态查询分组</li>
<li>对外开源</li>
</ul><h1 id="_1">如何创建业务并导入主机到业务中</h1>
<p>具体步骤：</p>
<p><strong>创建业务 -- 创建业务拓扑 -- 导入主机到资源池 -- 查看未分配到业务的主机 -- 分配主机到业务空闲机池 -- 分配主机到业务模块</strong></p>
<p><img alt="img" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/guide1.png" /></p>
<h2 id="_2">创建业务</h2>
<p>业务是蓝鲸持续部署环节比较重要的概念，主要用于资源和配置隔离，在配置平台创建的业务，默认同时应用于作业平台、标准运维、监控平台、故障自愈等场景。</p>
<p>通过导航栏点击“基础资源 - 业务”，进入业务管理功能页，然后点击【新建】按钮。</p>
<p><img alt="1581942469125" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581942469125.png" /></p>
<blockquote>
<p><strong>注意：</strong> 初始状态下，业务只有配置平台管理员能够新增和管理业务。管理员可以根据实际企业需要，通过权限分组的方式，给指定用户组分配业务管理权限。</p>
</blockquote>
<ul>
<li>
<p>业务是蓝鲸体系内较为关键的资源，所以业务不提供删除功能，当业务不再需要的业务可以使用 <strong>业务归档</strong> 功能把业务从列表中移除。</p>
</li>
<li>
<p>当业务归档的时候，用户需要确认其他 SaaS 已经没有使用此业务，包含并不限于业务下的定时任务、监控配置已经停止，否则会产生过多异常。</p>
</li>
</ul>
<p><img alt="1581942631295" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581942631295.png" /></p>
<p>业务被归档以后，所有 SaaS 均无法看到此业务。</p>
<ul>
<li>归档的业务需要还原时，可以使用 <strong>业务归档的还原</strong> 功能恢复到正常使用状态：</li>
</ul>
<p>业务归档还原以后，可以在业务的归档列表中，看到已经归档的业务。</p>
<p><img alt="1581942689604" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581942689604.png" /></p>
<p>点击【恢复业务】可把业务恢复到正常使用状态，为了方便用户辨识，从归档恢复的业务会默认在业务名称后方加上（-archived）标识，用户根据需要修改业务名称即可。</p>
<p><img alt="1581942749641" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581942749641.png" /></p>
<h2 id="_3">创建业务拓扑</h2>
<p>创建业务以后，在“业务资源 - 业务拓扑”中，可以看到下拉菜单中增加了刚刚新增的业务。业务创建完成会自动创建“空闲机”，“故障机”,“待回收”三个模块。</p>
<p><img alt="1581942817456" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581942817456.png" /></p>
<p>此时我们可以对业务定义业务拓扑。点击拓扑树上的业务，后方出现的【新建】按钮可以创建业务的直接下级即“集群”和其直接下级“模块”。</p>
<h2 id="_4">导入主机到资源池</h2>
<p>为了标准化管理和提高主机资源利用率，设计了资源池模式，所有主机需要统一先录入到主机资源池中，然后再分配到业务中。</p>
<p>导航进入“基础资源 -- 主机”页面，点击【导入主机】按钮进行导入主机。</p>
<p><img alt="image-20201103110259268" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/image-20201103110259268.png" /></p>
<p>目前在配置平台导入主机分以下两种，一种是 <code>Excel 批量导入</code>，一种是通过 <code>节点管理</code> 进行自动导入。</p>
<p>首先点击“基础资源 -- 主机”页面的 【导入主机】 按钮打开导入对话框。</p>
<h3 id="1-excel">方法 1：通过 Excel 批量导入</h3>
<p>当主机在直连区域（蓝鲸中控环境可以直接访问区域）时，可以使用此方法。点击 【下载模版】 按钮，下载到符合格式好的 Excel 文档。</p>
<p><img alt="image-20201103110320923" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/image-20201103110320923.png" /></p>
<p>打开 Excel 文档以后，可以到内网 IP 是必填属性，其他属性如果不需要导入，可以把相关列删除。Excel 中第二个 Sheet 中有详细的填写说明，建议首次使用用户先查看此说明。</p>
<blockquote>
<p><strong>注意：</strong> 录入同样内网 IP，是属性覆盖的操作，可以使用此特性对主机属性进行批量更新。</p>
</blockquote>
<h3 id="2">方法 2：节点管理进行自动导入</h3>
<p>切换到自动导入的 Tab 页，通过点击跳转到链接可以打开 <code>Agent 安装</code> 应用，根据节点管理对 Agent 的安装流程，相关主机会自动录入到配置平台对应业务下的的资源池中。</p>
<p><img alt="image-20201103110357994" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/image-20201103110357994.png" /></p>
<h2 id="_5">查看未分配到业务的主机</h2>
<p>通过侧边导航“基础资源 -- 主机”，默认功能页面中即显示了当前企业中尚未分配到业务的主机。</p>
<p><img alt="image-20201103110426219" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/image-20201103110426219.png" /></p>
<ul>
<li>查看企业内所有主机：</li>
</ul>
<p>在主机资源池管理页面，同构勾选查询范围下的已分配主机，进行查询，可以查询到当前企业中所有的主机资源。</p>
<p><img alt="image-20201103110455502" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/image-20201103110455502.png" /></p>
<h2 id="_6">分配主机到业务空闲机池</h2>
<p>选中目标主机后，选择上方分配到指定业务，默认是放到业务的空闲机池。</p>
<p><img alt="image-20201103110644833" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/image-20201103110644833.png" /></p>
<h2 id="_7">分配主机到业务模块</h2>
<p>导航进入“业务资源 -- 业务拓扑”页面。</p>
<p>可以看到主机已经被分配到业务的“空闲机”模块中，勾选需要转移的主机，点击上方的【转移】按钮，在对话框中选择目标模块，点击【保存】完成转移。</p>
<p><img alt="image-20201103110755291" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case1/image-20201103110755291.png" /></p>
<blockquote>
<p>Note :
需要注意，考虑到实际业务的应用场景，主机转移有以下特性：
1. 一个主机可以属于多个模块
2. 主机归属于空闲机、故障机时，不可同时属于其他业务模块（当选中空闲机、故障机时系统会提示是否去除其他选中模块）
3. 主机需要归还企业的资源池时，必须先转移到空闲机模块</p>
</blockquote><h1 id="a-b">主机由 A 业务模块转移到 B 业务模块</h1>
<p>具体步骤：</p>
<p><strong>主机分配到 A 业务空闲机池 -- 主机上交资源池 -- 主机分配到 B 业务空闲机池 -- 主机分配到 B 业务</strong></p>
<p><img alt="guide2" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/guide2.png" /></p>
<blockquote>
<p>Note：
主机的业务属性变更信息不会与节点管理同步，所以在主机转移之前请在节点管理卸载主机的 Agent ,主机转移之后再在节点管理重装 Agent 。</p>
</blockquote>
<h2 id="1-a">1. 从普通模块下的主机分配到 A 业务空闲机池</h2>
<p>导航栏进入 "业务资源 -- 业务拓扑" 页面。</p>
<p>查看 A 业务 a1 模块下的主机，勾选需要转移的主机，点击上方的 【转移到】 按钮，在对话框中选择目标模块 "空闲模块"，在对话框中选择转移的目标模块，这里选中“空闲机”。进入下一步确认服务实例的变化，即完成转移操作</p>
<p><img alt="image-20201105103528565" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case2/image-20201105103528565.png" /></p>
<p><img alt="image-20201105103603145" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case2/image-20201105103603145.png" /></p>
<h2 id="2">2. 主机上交资源池</h2>
<p>导航进入 "业务资源 -- 业务拓扑" 页面</p>
<p>查看业务的 "空闲机" 模块，勾选刚刚转移过来的主机，点击上方的 【转移到】 按钮，在对话框中选择 "资源池"，点击 【确认】 完成转移。</p>
<p><img alt="image-20201105103804867" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case2/image-20201105103804867.png" /></p>
<p><img alt="image-20201105103834516" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case2/image-20201105103834516.png" /></p>
<h2 id="3-b">3. 主机分配到 B 业务空闲机池</h2>
<p>进入到“资源--主机--未分配”，选中刚刚转入过来的主机，选择“分配到--业务空闲机”</p>
<p><img alt="image-20201105104649279" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case2/image-20201105104649279.png" /></p>
<p>选择需要转移到的目标业务</p>
<p><img alt="image-20201105104834184" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case2/image-20201105104834184.png" /></p>
<h2 id="b">主机分配到 B 业务的模块</h2>
<p>进入到业务中，找到空闲机下的主机，转移到所需要分配的模块即可</p>
<p><img alt="image-20201105105048611" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case2/image-20201105105048611.png" /></p><h1 id="_1">快速入门模型和模型拓扑管理</h1>
<p>随着企业的发展，CMDB 会逐步承担更多的基础配置责任，蓝鲸配置平台通过构建了底层的 "模型"，提供了动态拓展的能力，帮助企业在线实现 CMDB 的能力升级。以下通过以一个机房例子介绍如何操作：</p>
<p>具体步骤：</p>
<p><strong>创建机房模型 -- 完善机房属性 -- 完善关联关系 -- 创建实例</strong></p>
<h2 id="_2">创建机房模型</h2>
<p>配置平台内置一些通用的模型，当现有的模型不能够满足需要的时候，可以通过新建的方式增加模型。</p>
<p>点击左上角的 【新建模型】 按钮，打开新建模型的对话框，然后选择所属分组，选择模型图标（后续可自定义图标），填写模型唯一标识以及名称，最后点击保存新建完成</p>
<p><img alt="image-20201105105142618" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105105142618.png" /></p>
<p><img alt="image-20201105105224370" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105105224370.png" /></p>
<p>创建模型需要填写 "唯一标识" 和 "名称"：</p>
<p><strong>唯一标识</strong>：是模型在系统中的唯一标识，需要保证不可重复。</p>
<p><strong>名称</strong>：是用户在产品中能够看到的描述名称。</p>
<p>点击确认后新的模型创建成功。新的模型会自带一个默认的必填唯一字段 "实例名"，用户可根据模型的实际定位修改此字段的中文名称，但是英文名称因为作为系统底层唯一标识不可调整。</p>
<p><img alt="image-20201105105425125" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105105425125.png" /></p>
<p>在实际场景中，我们需要给模型丰富更多的字段，通过点击“新建字段”增加更多字段（可以批量导入字段，详见 <a href="../产品功能/Model.md">模型字段导出和导入</a>小节）。</p>
<p><img alt="image-20201105105449717" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105105449717.png" /></p>
<p>目前支持 "短字符"（长度 256 个英文）、"长字符"（长度 2000 个英文）、"数字"、"枚举"、“列表”、"日期"、"时间"、"时区"、"用户"、"布尔"、“组织”等类型。</p>
<p>根据所选择的字段类型，分别支持用户定义验证方式："是否必填"、"正则验证"、"大于小于范围" 等。</p>
<p><img alt="image-20201105105749968" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105105749968.png" /></p>
<h2 id="_3">完善关联关系</h2>
<p>为了让机房能够和主机有关联能力，我们接下来配置主机到机房的关联关系。</p>
<p>切换到模型关联 Tab 页，点击新建</p>
<p><img alt="image-20201105105907518" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105105907518.png" /></p>
<p>关联关系的配置，核心需要分析两个对象之间的关系限制，由于一个主机只有可能属于一个物理机房，因此我们配置机房作为原，主机作为目标，约束设定为 1-N：</p>
<h2 id="_4">创建实例</h2>
<p>完成以上操作后，我们已经为配置平台拓展了机房的管理能力，接下来创建实际的机房记录</p>
<p>在资源页面</p>
<p><img alt="image-20201105105950250" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105105950250.png" /></p>
<p>点击新建，填写必要属性完成创建</p>
<p><img alt="image-20201105110132817" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105110132817.png" /></p>
<blockquote>
<p>Note: 如果需要批量添加，可以点击【导入】按钮进入到导入功能对话框，如果是初次导入，可以先下载实例导入模板进行编辑。</p>
</blockquote>
<p><img alt="image-20201105110200939" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105110200939.png" /></p>
<p>关联的管理可以打开刚刚创建的机房详情，切换到关联选项卡，可以看到当前机房还没有和任何其他实例关联。</p>
<p>创建关联,点击关联管理，此时会显示当前可以关联的主机，选中关联即可。</p>
<p><img alt="image-20201105110511066" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105110511066.png" /></p>
<p>完成以后关闭此视图，可以看到关联关系或者关联拓扑。</p>
<p><img alt="image-20201105110540021" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105110540021.png" /></p>
<p><img alt="image-20201105110618098" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/case3/image-20201105110618098.png" /></p><h1 id="cmdb">CMDB 如何管理主机</h1>
<h2 id="_1">情景</h2>
<p>新业务（常见的三层架构：接入层、逻辑层、存储层）上线，需要用 CMDB 管理业务上线依赖的主机资源，便于后续实现发布、变更、故障处理等场景的自动化流程。</p>
<h2 id="_2">前提条件</h2>
<p>在配置平台中 <a href="../快速入门/case1.md">新建完业务</a>，并导入主机及将主机分配到业务中。</p>
<h2 id="_3">操作步骤</h2>
<ul>
<li>梳理业务架构</li>
<li>新建集群</li>
<li>新建模块</li>
<li>使用场景：在作业平台中查询接入层的磁盘使用率</li>
</ul>
<h3 id="_4">梳理业务架构</h3>
<p>业务的架构设计最终要体现在 CMDB 的业务拓扑树上，所以我们先梳理业务的架构。</p>
<p>以业务“欢乐游戏( demo )"为例，其架构是常见的三层架构：<code>接入层</code> -&gt; <code>逻辑层</code> -&gt; <code>存储层</code></p>
<p>为了满足全国各地用户就近接入，按照地域划分了不同的区，但架构一致。</p>
<p><img alt="-w758" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15625775986620.jpg" /></p>
<h3 id="_5">新建集群</h3>
<p>按照上述业务架构，可将做如下对应：</p>
<ul>
<li>业务中的区 &lt;-&gt; CMDB 中的集群</li>
<li>业务中的分层架构 &lt;-&gt; CMDB 中模块</li>
</ul>
<p>在<code>业务资源</code> -&gt; <code>业务拓扑</code>中，选中根节点<code>业务</code>，新建节点<code>集群</code>一区。</p>
<p><img alt="image-20201105111505952" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_hosts/image-20201105111505952.png" /></p>
<p>创建完成以后，可以在“节点信息”中看到当前集群的属性</p>
<blockquote>
<p>环境类型：一般保持<code>正式</code>；测试环境设置为<code>测试</code>，让测试环境的发布流程模板只能选择<code>测试</code>集群；</p>
<p>服务状态：一般保持<code>开放</code>，在某些场景如开区准备的时候，状态可置为<code>关闭</code>，让发布系统无法选中；</p>
</blockquote>
<p><img alt="image-20201105111608014" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_hosts/image-20201105111608014.png" /></p>
<p>新建完集群<code>一区</code>、<code>二区</code>后，可看到如下业务拓扑。</p>
<p><img alt="image-20201105111639714" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_hosts/image-20201105111639714.png" /></p>
<p>接下来，在集群下创建模块。</p>
<h3 id="_6">新建模块</h3>
<p>选中<code>集群</code>节点，新建模块。</p>
<p><img alt="image-20201105111705838" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_hosts/image-20201105111705838.png" /></p>
<p><img alt="image-20201105111739203" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_hosts/image-20201105111739203.png" /></p>
<blockquote>
<p>服务分类用于标识当前模块的实际功能组件，例如 mysql 组件、Nginx 组件，甚至业务的自定义组件等</p>
</blockquote>
<p>创建完成以后，可以在“节点信息”中看到当前模块的详情属性</p>
<blockquote>
<p>模块类型：一般为<code>普通</code>，当模块类型为数据库类时，选择<code>数据库</code></p>
<p>主要维护人、备份维护人：该模块维护人，一般在告警推送时会用到；区别在于电话通知时优先<code>主要维护人</code>，如果<code>主要维护人</code>未接听，自动转<code>备份维护人</code>，此处逻辑需要自行实现；</p>
</blockquote>
<p><img alt="image-20201105112002977" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_hosts/image-20201105112002977.png" /></p>
<p>模块创建好了，接下来 <a href="../快速入门/case1.md#分配主机到业务空闲机池">分配主机</a>，将 <code>主机资源</code> -&gt; <code>主机</code> 中的资源按照业务架构分配至对应的模块；</p>
<p><img alt="image-20201105112952109" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_hosts/image-20201105112952109.png" /></p>
<h3 id="_7">使用场景：在作业平台中查询接入层的磁盘使用率</h3>
<p>通过一个简单的场景，体验 <a href="../../../作业平台/产品白皮书/Introduction/What-is-Job.md">作业平台</a> 如何消费主机实例。</p>
<p>{% video %}media/cmdb_job_consume.mp4{% endvideo %}</p>
<h2 id="_8">扩展阅读</h2>
<h3 id="saas-cmdb">蓝鲸内置 SaaS 的 CMDB 消费场景</h3>
<h4 id="_9">应用发布、变更：资源编排工具 标准运维</h4>
<p>应用发布、变更流程包含版本在多台主机上的文件分发、命令执行等操作，如何优雅的选择这批主机，需要使用 CMDB 的查询主机实例功能。</p>
<p><img alt="CMDB场景-标准运维-01" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB场景-标准运维-01.png" />
<center>（在标准运维中一次应用交付的执行历史）</center></p>
<p>在参数中使用<code>动态IP</code>变量，<strong>运维无需关心主机扩缩容、故障替换等场景带来的主机变更</strong>，无需担心漏更新主机或更新错主机。</p>
<p><img alt="标准运维传参-CMDB" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/标准运维传参-CMDB.png" /></p>
<h4 id="_10">故障处理：监控、故障自愈</h4>
<p>针对业务架构中的某一层级模块（如接入层）设置一个 <a href="../../../监控平台/产品白皮书/functions/conf/rules.md">告警检测策略</a>，无需关心实例的新增、删除及修改。</p>
<p><img alt="监控平台的CMDB消费场景" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/蓝鲸监控的CMDB消费场景.png" /></p>
<p>如何实现实时感知，背后的逻辑是通过 CMDB 的事件推送功能，实时感知实例的新增、修改、删除等动作。</p>
<p><img alt="事件推送" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/事件推送.png" /></p>
<p>在 <a href="../../../故障自愈/产品白皮书/Intro/README.md">故障自愈</a> 中的消费场景也是如此，一个或多个模块的某一个告警，关联对应的处理动作。</p>
<p><img alt="故障自愈的CMDB消费场景" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/故障自愈的CMDB消费场景.png" /></p>
<h4 id="dbaaix-sa">平台团队对资源的管控，例如全业务 DBA、AIX SA</h4>
<p>以 DBA 为例，需要管控所有 DB，可将运行数据库的主机所属模块的类型设置为<code>数据库</code>，然后通过<code>动态分组</code>功能查询模块类型为<code>数据库</code>的主机。</p>
<p><img alt="-w1502" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15625888898060.jpg" /></p>
<p>在 <a href="../../../作业平台/产品白皮书/Introduction/What-is-Job.md">蓝鲸作业平台</a> 中可使用该动态分组来选择 DB 主机。</p>
<p><img alt="-w1234" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15625757452328.jpg" /></p>
<h3 id="_11">三级拓扑不够用，怎么办？新建多级拓扑节点</h3>
<p>如果业务架构在大区（<code>集群</code>）之上还有一级（平台：如<code>Android_Weixin</code>、<code>Android_QQ</code>等）。</p>
<p><img alt="-w814" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15625862638485.jpg" /></p>
<p>可在<code>业务模型</code>中，<code>业务</code>与<code>集群</code>间新建一级或多级拓扑</p>
<p><img alt="-w1163" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15625750066642.jpg" /></p>
<p>新的业务拓扑如下：</p>
<p><img alt="-w1521" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15625764667893.jpg" /></p>
<blockquote>
<p>注：当前版本新增层级拓扑的生效范围是所有业务，在未来的某一个版本中可调整生效范围；
蓝鲸体系在未来的某一个迭代中，将重点弱化业务和细化权限。</p>
</blockquote>
<h3 id="master-db-slave-db">Master DB 和 Slave DB 如何实现物理架构的高可用</h3>
<p>两者一定不要放在同一个机架或交换机下，否则机架或交换机掉电，亦或是交换机故障，Master DB 和 Slave DB 都宕机，无法正常切换，导致业务无法对外提供服务。</p>
<p>操作方法：[模型管理] -&gt; [模型] -&gt; [主机] -&gt; [模型字段]，新增<code>存放机架 ID</code>、<code>网络设备 ID</code>。</p>
<p>此外，配置主机与机架或上联交换机的关联可使用<code>模型关联</code>，确保数据的唯一性可设置<code>唯一校验</code>，另外<code>字段分组</code>可调整 CI 属性的呈现方式。</p>
<p><img alt="-w1569" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15637891727474.jpg" /></p><h1 id="cmdb">CMDB 如何管理进程</h1>
<h2 id="_1">情景</h2>
<p>应用的存储是 MariaDB，在 CMDB 中注册 MariaDB，以便在监控系统做进程监控。</p>
<h2 id="_2">前提条件</h2>
<p>在配置平台中<a href="../快速入门/case1.md">新建业务</a> 及业务拓扑。</p>
<h2 id="_3">步骤</h2>
<ol>
<li>
<p>CMDB 中创建服务实例，并注册进程和端口</p>
</li>
<li>
<p>监控系统自动实现进程端口监控</p>
</li>
</ol>
<h3 id="1-cmdb">1. CMDB 中创建服务实例，并注册进程和端口</h3>
<p>当我们把主机从空闲机转移到业务模块下， 会提示是否要完善进程信息</p>
<p><img alt="image-20201105113350414" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_process/image-20201105113350414.png" /></p>
<p><img alt="image-20201105113845017" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_process/image-20201105113845017.png" /></p>
<p><img alt="image-20201105113906953" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_process/image-20201105113906953.png" /></p>
<p>在菜单<code>业务资源</code>-<code>进程管理</code>中<code>新建进程</code></p>
<p><img alt="image-20201105113928695" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CMDB_management_process/image-20201105113928695.png" /></p>
<h4 id="_4">注册进程</h4>
<ul>
<li>进程别名：对外显示的服务名：<code>MariaDB</code>；</li>
<li>进程名称：程序的二进制名称：<code>mysqld</code>；</li>
</ul>
<p>在配置功能名称时，使用命令查询该程序的二进制名称</p>
<pre class="codehilite"><code class="language-bash">$ ps -ef | grep -i mysqld
mysql     7800     1  0 7月08 ?       00:00:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql     7980  7800  0 7月08 ?       00:01:55 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock</code></pre>


<blockquote>
<p>注：监控系统一般<code>完全匹配</code>二进制名称。
   获取二进制名称的方法：<code>basename $(readlink -f /proc/7980/exe)</code></p>
</blockquote>
<h4 id="_5">注册端口</h4>
<p>查询 mysqld 监听的 IP 和端口</p>
<pre class="codehilite"><code class="language-bash">$ netstat -antp | grep mysqld
tcp        0      0 10.0.4.29:3306          0.0.0.0:*               LISTEN      7980/mysqld</code></pre>


<ul>
<li>绑定 IP：MariaDB 为存储层，一般绑定内网 IP，故选择<code>第一内网 IP</code>。</li>
<li>端口：进程监听的端口，<code>3306</code></li>
<li>协议：<code>TCP</code></li>
</ul>
<h3 id="_6">监控系统自动实现进程端口监控</h3>
<p>等候一分钟，在蓝鲸自带的监控系统 <a href="../../../监控平台/产品白皮书/intro/README.md">监控平台</a> 中可以看到 <a href="../../../监控平台/产品白皮书/guide/process_monitor.md">进程的运行情况</a>。</p>
<p><img alt="-w1570" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15632804527438.jpg" /></p>
<p>点击 MariaDB 图标，可以查看其占用的 CPU、内存使用率以及文件句柄数等进程占用的资源指标。</p>
<p><img alt="-w1249" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/15626645050893.jpg" /></p>
<h2 id="_7">扩展阅读</h2>
<h3 id="cmdb_1">监控系统消费 CMDB 中进程配置背后的逻辑</h3>
<p>当给模块分配完主机后，该主机的大部分 CI 属性将被自动推送至<code>/var/lib/gse/host/hostid</code></p>
<pre class="codehilite"><code class="language-json">{
  .....
     &quot;process&quot; : [
      {
         &quot;bind_ip&quot; : &quot;3&quot;,
         &quot;bind_modules&quot; : [ 68 ],
         &quot;bk_func_id&quot; : &quot;&quot;,
         &quot;bk_func_name&quot; : &quot;mysqld&quot;,  // 对应功能名称
         &quot;bk_process_id&quot; : 110,
         &quot;bk_process_name&quot; : &quot;MariaDB&quot;,  // 对应进程名称
         &quot;bk_start_param_regex&quot; : &quot;&quot;,
         &quot;port&quot; : &quot;3306&quot;,
         &quot;protocol&quot; : &quot;1&quot;
      }
   ]
}</code></pre>


<p>蓝鲸内置的进程监控采集器<code>processbeat</code>会读取该文件，并写入自身的配置文件<code>/usr/local/gse/plugins/etc/processbeat.conf</code>，以实现进程和端口的监控。</p>
<pre class="codehilite"><code class="language-yaml">......
processbeat.processes:
- name: mysqld // 二进制名称
  displayname: MariaDB
  protocol: tcp
  ports:
  - 3306
  paramregex: &quot;&quot;
  bindip: 10.0.4.29</code></pre>


<h3 id="java">二进制名称均为 java，该如何配置</h3>
<p>如 ZooKeeper、Hadoop 的二进制均为<code>java</code>，可用进程启动参数区分。</p>
<p>进程的功能名称均为<code>java</code>，<code>启动参数匹配规则</code>中分别输入<code>zookeeper</code>、<code>kafka</code>即可。</p>
<pre class="codehilite"><code class="language-bash">$ ps -ef | grep -i zookeeper

root      5897     1  0 Nov14 ?        01:49:00 /data/bkce/service/java/bin/java -Dzookeeper.log.dir=/data/bkce/logs/zk/ -Dzookeeper.root.logger=INFO,ROLLINGFILE -Dzookeeper.DigestAuthenticationProvider.superDigest=bkadmin:1bF5dHUwvnyrhMDaPLkHwFS1JOg= -cp /data/bkce/service/zk/bin/../build/classes:/data/bkce/service/zk/bin/../build/lib/*.jar:/data/bkce/service/zk/bin/../lib/slf4j-log4j12-1.6.1.jar:/data/bkce/service/zk/bin/../lib/slf4j-api-1.6.1.jar:/data/bkce/service/zk/bin/../lib/netty-3.10.5.Final.jar:/data/bkce/service/zk/bin/../lib/log4j-1.2.16.jar:/data/bkce/service/zk/bin/../lib/jline-0.9.94.jar:/data/bkce/service/zk/bin/../zookeeper-3.4.10.jar:/data/bkce/service/zk/bin/../src/java/lib/*.jar:/data/bkce/etc:/data/bkce/service/zk/conf:/data/bkce/service/java/lib: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /data/bkce/etc/zoo.cfg
root     10220     1  2 Nov14 ?        13:17:41 /data/bkce/service/java/bin/java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true -Xloggc:/data/bkce/logs/kafka/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/data/bkce/logs/kafka -Dlog4j.configuration=file:./../config/log4j.properties -cp /data/bkce/service/java/lib::/data/bkce/service/kafka/bin/../libs/aopalliance-repackaged-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/argparse4j-0.7.0.jar:/data/bkce/service/kafka/bin/../libs/connect-api-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-file-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-json-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-runtime-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-transforms-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/guava-18.0.jar:/data/bkce/service/kafka/bin/../libs/hk2-api-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/hk2-locator-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/hk2-utils-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/jackson-annotations-2.8.0.jar:/data/bkce/service/kafka/bin/../libs/jackson-annotations-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-core-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-databind-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-jaxrs-base-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-jaxrs-json-provider-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-module-jaxb-annotations-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/javassist-3.20.0-GA.jar:/data/bkce/service/kafka/bin/../libs/javax.annotation-api-1.2.jar:/data/bkce/service/kafka/bin/../libs/javax.inject-1.jar:/data/bkce/service/kafka/bin/../libs/javax.inject-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/javax.servlet-api-3.1.0.jar:/data/bkce/service/kafka/bin/../libs/javax.ws.rs-api-2.0.1.jar:/data/bkce/service/kafka/bin/../libs/jersey-client-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-common-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-container-servlet-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-container-servlet-core-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-guava-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-media-jaxb-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-server-2.24.jar:/data/bkce/service/kafka/bin/../libs/jetty-continuation-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-http-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-io-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-security-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-server-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-servlet-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-servlets-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-util-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jopt-simple-5.0.3.jar:/data/bkce/service/kafka/bin/../libs/kafka_2.12-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka_2.12-0.10.2.0-sources.jar:/data/bkce/service/kafka/bin/../libs/kafka_2.12-0.10.2.0-test-sources.jar:/data/bkce/service/kafka/bin/../libs/kafka-clients-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-log4j-appender-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-streams-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-streams-examples-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-tools-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/log4j-1.2.17.jar:/data/bkce/service/kafka/bin/../libs/lz4-1.3.0.jar:/data/bkce/service/kafka/bin/../libs/metrics-core-2.2.0.jar:/data/bkce/service/kafka/bin/../libs/osgi-resource-locator-1.0.1.jar:/data/bkce/service/kafka/bin/../libs/reflections-0.9.10.jar:/data/bkce/service/kafka/bin/../libs/rocksdbjni-5.0.1.jar:/data/bkce/service/kafka/bin/../libs/scala-library-2.12.1.jar:/data/bkce/service/kafka/bin/../libs/scala-parser-combinators_2.12-1.0.4.jar:/data/bkce/service/kafka/bin/../libs/slf4j-api-1.7.21.jar:/data/bkce/service/kafka/bin/../libs/slf4j-log4j12-1.7.21.jar:/data/bkce/service/kafka/bin/../libs/snappy-java-1.1.2.6.jar:/data/bkce/service/kafka/bin/../libs/validation-api-1.1.0.Final.jar:/data/bkce/service/kafka/bin/../libs/zkclient-0.10.jar:/data/bkce/service/kafka/bin/../libs/zookeeper-3.4.9.jar kafka.Kafka ../config/server.properties

ps -ef | grep -i kafka
root     10220     1  2 Nov14 ?        13:17:44 /data/bkce/service/java/bin/java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true -Xloggc:/data/bkce/logs/kafka/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/data/bkce/logs/kafka -Dlog4j.configuration=file:./../config/log4j.properties -cp /data/bkce/service/java/lib::/data/bkce/service/kafka/bin/../libs/aopalliance-repackaged-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/argparse4j-0.7.0.jar:/data/bkce/service/kafka/bin/../libs/connect-api-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-file-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-json-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-runtime-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/connect-transforms-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/guava-18.0.jar:/data/bkce/service/kafka/bin/../libs/hk2-api-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/hk2-locator-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/hk2-utils-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/jackson-annotations-2.8.0.jar:/data/bkce/service/kafka/bin/../libs/jackson-annotations-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-core-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-databind-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-jaxrs-base-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-jaxrs-json-provider-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/jackson-module-jaxb-annotations-2.8.5.jar:/data/bkce/service/kafka/bin/../libs/javassist-3.20.0-GA.jar:/data/bkce/service/kafka/bin/../libs/javax.annotation-api-1.2.jar:/data/bkce/service/kafka/bin/../libs/javax.inject-1.jar:/data/bkce/service/kafka/bin/../libs/javax.inject-2.5.0-b05.jar:/data/bkce/service/kafka/bin/../libs/javax.servlet-api-3.1.0.jar:/data/bkce/service/kafka/bin/../libs/javax.ws.rs-api-2.0.1.jar:/data/bkce/service/kafka/bin/../libs/jersey-client-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-common-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-container-servlet-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-container-servlet-core-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-guava-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-media-jaxb-2.24.jar:/data/bkce/service/kafka/bin/../libs/jersey-server-2.24.jar:/data/bkce/service/kafka/bin/../libs/jetty-continuation-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-http-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-io-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-security-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-server-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-servlet-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-servlets-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jetty-util-9.2.15.v20160210.jar:/data/bkce/service/kafka/bin/../libs/jopt-simple-5.0.3.jar:/data/bkce/service/kafka/bin/../libs/kafka_2.12-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka_2.12-0.10.2.0-sources.jar:/data/bkce/service/kafka/bin/../libs/kafka_2.12-0.10.2.0-test-sources.jar:/data/bkce/service/kafka/bin/../libs/kafka-clients-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-log4j-appender-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-streams-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-streams-examples-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/kafka-tools-0.10.2.0.jar:/data/bkce/service/kafka/bin/../libs/log4j-1.2.17.jar:/data/bkce/service/kafka/bin/../libs/lz4-1.3.0.jar:/data/bkce/service/kafka/bin/../libs/metrics-core-2.2.0.jar:/data/bkce/service/kafka/bin/../libs/osgi-resource-locator-1.0.1.jar:/data/bkce/service/kafka/bin/../libs/reflections-0.9.10.jar:/data/bkce/service/kafka/bin/../libs/rocksdbjni-5.0.1.jar:/data/bkce/service/kafka/bin/../libs/scala-library-2.12.1.jar:/data/bkce/service/kafka/bin/../libs/scala-parser-combinators_2.12-1.0.4.jar:/data/bkce/service/kafka/bin/../libs/slf4j-api-1.7.21.jar:/data/bkce/service/kafka/bin/../libs/slf4j-log4j12-1.7.21.jar:/data/bkce/service/kafka/bin/../libs/snappy-java-1.1.2.6.jar:/data/bkce/service/kafka/bin/../libs/validation-api-1.1.0.Final.jar:/data/bkce/service/kafka/bin/../libs/zkclient-0.10.jar:/data/bkce/service/kafka/bin/../libs/zookeeper-3.4.9.jar kafka.Kafka ../config/server.properties</code></pre><h1 id="cmdb-cmdb">企业原有 CMDB 同步至蓝鲸 CMDB</h1>
<blockquote>
<p>感谢社区用户 <a href="https://bk.tencent.com/s-mart/personal/10966/">Kevin</a> 提供该文档.</p>
</blockquote>
<h2 id="_1">情景</h2>
<p>公司基础部门维护公司统一的一套 CMDB，资源主要以服务器为主，资源交付后会直接进入公司的 CMDB，需要手动导出列表，修改成蓝鲸 CMDB 的导入格式，导入蓝鲸 CMDB。存在如下问题：</p>
<ul>
<li>资源交付后需要手动导出、导入，少量机器频繁交付，为了让机器及时加入蓝鲸管控，需要频繁人工参与</li>
<li>公司 CMDB 与蓝鲸 CMDB 字段不统一，需要手动复制、编辑字段属性，再导入蓝鲸，非常繁琐</li>
</ul>
<h2 id="_2">前提条件</h2>
<ul>
<li>
<p>在配置平台中 <a href="../快速入门/case1.md">新建好业务</a>。</p>
</li>
<li>
<p>熟悉一门脚本语言，如<code>Python</code>，本教程以<code>Python</code>为例</p>
</li>
<li>
<p>了解 蓝鲸 CMDB API</p>
</li>
</ul>
<h2 id="_3">操作步骤</h2>
<ul>
<li>
<p>梳理同步逻辑</p>
</li>
<li>
<p>代码实践及解读</p>
</li>
<li>
<p>定时同步</p>
</li>
</ul>
<h3 id="_4">梳理同步逻辑</h3>
<p>查询公司 CMDB 与蓝鲸 CMDB 服务器属性的对应关系，生成属性映射 MAP 表，MAP 表中只记录需要关注的属性，并确认相关属性都已在蓝鲸 CMDB 中创建。</p>
<p><strong>新增资源</strong></p>
<ul>
<li>
<p>通过接口查询公司 CMDB，获取自己所在业务部门下的全量服务器列表</p>
</li>
<li>
<p>通过接口获取蓝鲸 CMDB 的服务器列表</p>
</li>
<li>
<p>遍历两个列表，找出蓝鲸 CMDB 中没有的服务器，汇总成列表，并通过接口录入到蓝鲸 CMDB</p>
</li>
</ul>
<p><strong>更新资源</strong></p>
<ul>
<li>分别获取两个 CMDB 的数据，遍历两组数据，对比属性 MAP 表中的属性字段，找出数据不同的服务器，汇总成列表，再统一更新到蓝鲸 CMDB</li>
</ul>
<h3 id="_5">代码实践及解读</h3>
<h4 id="_6">新建应用</h4>
<p>在蓝鲸开发者中心 新建一个应用，用于调用 CMDB 的 API。</p>
<pre class="codehilite"><code class="language-python">import urllib2
import json
import logging

PAAS_API = 'https://paas.bk.com' # 蓝鲸 PaaS 地址

logging.basicConfig(level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%a, %d %b %Y %H:%M:%S',
    filename='./update.log',
    filemode='a')

BASE_ARGS = {
    '''
    接口调用中的通用参数
    蓝鲸中新建一个应用，获取相关应用信息
    并在https://paas.bk.com/admin/bkcore/functioncontroller/中添加认证白名单，否则调用CMDB     接口会失败，参考： 开发者中心-API网关-使用指南-API调用说明
    '''
    'bk_app_code': 'sync-cmdb',  # 应用 ID
    'bk_app_secret': 'xxxx-xxxxxxxxxxxx', # 应用 Token
    'bk_username':'user.name' # 蓝鲸系统中的用户名
    }</code></pre>


<h4 id="cmdb">获取蓝鲸 CMDB 主机列表</h4>
<p>查询蓝鲸 CMDB 的获取主机 <code>search_host</code> API ，返回主机列表</p>
<pre class="codehilite"><code class="language-python">def getBkCmdbHost():
    # 查询蓝鲸CMDB，返回主机列表
    bkList = {}
    url = PAAS_API + '/api/c/compapi/v2/cc/search_host/' # api请求地址
    apiArgs = {
        # api相关参数，参考https://paas.bk.com/esb/api_docs/system/CC/search_host/
        'condition':[
            {
                &quot;bk_obj_id&quot;: &quot;host&quot;,
                &quot;fields&quot;: [],
                &quot;condition&quot;: []
            }]
    }

    args = dict(BASE_ARGS.items() + apiArgs.items())
    data = json.dumps(args)
    request = urllib2.Request(url, data=data)
    response = urllib2.urlopen(request)
    content = response.read()
    j_content = json.loads(content)
    for item in j_content['data']['info']:
        bkList[item['host']['bk_host_innerip']] = item['host']
    return bkList</code></pre>


<h4 id="cmdb_1">获取 公司 CMDB 主机列表</h4>
<p>调用公司 CMDB 获取主机列表 API，返回主机列表</p>
<pre class="codehilite"><code class="language-python">def getCmdbHost():
    # 根据企业内部接口自己实现，返回IP信息列表
    '''
    infoList = [
        &quot;ip1&quot;: {
            &quot;sn&quot;: &quot;xxxx&quot;,
            &quot;service_term&quot;: 3,
            ...
        },
        &quot;ip2&quot;: {},
        ...
    ]
    '''</code></pre>


<h4 id="ip-ip">生成新增 IP 列表、更新 IP 列表、更新信息列表</h4>
<p>根据 <strong>获取蓝鲸 CMDB 主机列表</strong>操作步骤 和  <strong>获取 公司 CMDB 主机列表</strong>操作步骤 获取到的两个主机列表，对比生成所需的新增列表和更新列表。</p>
<pre class="codehilite"><code class="language-python">def genAddList(cmdbList, bkList):
    # 对比两个列表，返回新增IP列表
    addList = []
    for k in cmdbList.keys():
        if k not in bkList.keys():
            #print k, cmdbList[k]
            addList.append(k)
    return addList

def genUpdateList(cmdbList, bkList):
    # 对比两个列表，生成需要更新的IP列表
    ipList = []
    attrMAP = {k: v for k, v in attributeMAP.items() if v is not None} # 过滤出自己关心的主机属性
    for ip, cmdbHost in cmdbList.items():
        if ip not in bkList.keys():
            continue
        bkHost = bkList[ip]
        for cmdbAttr, bkAttr in attrMAP.items():
            if cmdbAttr in cmdbHost.keys() and bkAttr in bkHost.keys() and cmdbHost[cmdbAttr] != bkHost[bkAttr]:
                ipList.append(ip)
    return ipList

def genInfoList(cmdbList, bkList, ipList, attributeMAP):
    # 根据IP列表生成主机详细信息列表
    infoList = {}
    attrMAP = {k: v for k, v in attributeMAP.items() if v is not None}
    for ip in ipList:
        ipInfo = {}
        for k, v in attrMAP.items():
            if k in cmdbList[ip].keys():
                ipInfo[attrMAP[k]] = cmdbList[ip][k]
        if ip in bkList.keys(): #添加bk_host_id
            ipInfo['bk_host_id'] = bkList[ip]['bk_host_id']
        infoList[ip] = ipInfo
    return infoList

attributeMAP = {
    # 属性对应列表，值为None的字段不关心，不录入蓝鲸cmdb
    'AssetNo':          'bk_asset_id',          #资产编号
    'SN':               'bk_sn',                #序列号
    'Manufacture':      'machine_manufacturer', #厂商
    'ManufactureType':  'machine_model',        #厂商型号
    'MachineType':      'machine_type',         #MachineType
    'HostName':         None,                   #主机名
    'IP':               'bk_host_innerip',      #IP
    'BusinessIP':       'bk_host_bizip',        #业务IP
    'PublicIP':         'bk_host_outerip',      #公网IP
    'VNetIP':           'bk_host_usernetip',    #用户网IP
    'tags':             None,                   #资产类型
    #其它...
}

addList = genAddList(cmdbList, bkList)
updateList = genUpdateList(cmdbList, bkList):
addInfoList = genInfoList(cmdbList, bkList, addList, attributeMAP)
updateInfoList = genInfoList(cmdbList, bkList, addList, attributeMAP)</code></pre>


<h4 id="cmdb_2">录入、更新主机数据到蓝鲸 CMDB</h4>
<ul>
<li>录入新增主机信息：使用  <strong>生成新增 IP 列表、更新 IP 列表、更新信息列表</strong>操作步骤 中生成的新增主机信息列表，录入蓝鲸 CMDB</li>
</ul>
<pre class="codehilite"><code class="language-python">def addBkCmdbHost(infoList):
    # 录入新增数据到cmdb
    '''
    infoList = [
        &quot;ip1&quot;: {
            &quot;bk_sn&quot;: &quot;xxxx&quot;,
            &quot;bk_service_term&quot;: 3,
            ...
        },
        &quot;ip2&quot;: {},
        ...
    ]
    '''

    ipInfoList = {}
    for k, v in enumerate(infoList.values()):
        v['bk_cloud_id'] = 0
        v['import_from'] = '3'
        if 'bk_host_id' in v.keys():
            del(v['bk_host_id'])
        #print k, v
        ipInfoList[str(k)] = v

    url = PAAS_API + '/api/c/compapi/v2/cc/add_host_to_resource/'
    apiArgs = {
        'host_info': ipInfoList
    }

    args = dict(BASE_ARGS.items() + apiArgs.items())
    logging.debug(args)
    data = json.dumps(args)
    request = urllib2.Request(url, data=data)
    response = urllib2.urlopen(request)
    content = response.read()
    print content

addBkCmdbHost(addInfoList)</code></pre>


<ul>
<li>更新主机数据：使用 <strong>生成新增 IP 列表、更新 IP 列表、更新信息列表</strong>操作步骤 中生成的更新主机信息列表，更新蓝鲸 CMDB</li>
</ul>
<pre class="codehilite"><code class="language-python">def updateBkCmdbHost(infoList):
    # 更新数据到cmdb
    url = PAAS_API + '/api/c/compapi/v2/cc/update_host/'
    for ip, ipInfo in infoList.items():
        bk_host_id = ipInfo['bk_host_id']
        del(ipInfo['bk_host_id'])
        apiArgs = {
            'bk_host_id': bk_host_id,
            'data': ipInfo
        }

        #print apiArgs
        args = dict(BASE_ARGS.items() + apiArgs.items())
        logging.debug(args)
        data = json.dumps(args)
        request = urllib2.Request(url, data=data)
        response = urllib2.urlopen(request)
        content = response.read()
        logging.debug('bk_host_id: ' + str(bk_host_id) + content)
        print json.loads(content)

updateBkCmdbHost(updateInfoList)</code></pre>


<h3 id="_7">定时同步</h3>
<ul>
<li>CMDB 同步脚本使用 <a href="../../../作业平台/产品白皮书/Features/Crons.md">JOB</a> 的定时作业或 <a href="../../../标准运维/产品白皮书/产品功能/flow.md">标准运维</a> 的定时任务进行周期托管，方便迁移或者修改维护</li>
</ul>
<p><img alt="1562225679643" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1562225679643.png" /></p>
<p>注：上述教程是企业 CMDB <code>单向</code>、<code>定期</code>同步主机实例至蓝鲸 CMDB 的实践，如果需要实时同步，一般推荐消息推动的方式。</p><h1 id="_1">全文检索</h1>
<p>首页的全文检索，可以帮助用户通过关键字搜索 CMDB 已有资源。</p>
<h2 id="_2">开启原文检索功能</h2>
<p>默认情况下，CMDB 的全文检索功能是关闭状态，如下图所示，只开放了主机的搜索功能。</p>
<p>您可以修改 CMDB 的配置文件，重启进程以后开启全文检索。</p>
<p><img alt="1589787054331" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787054331.png" /></p>
<p>全文检索的开启方式：</p>
<pre class="codehilite"><code class="language-bash">在common.conf的[site]条目下修改full_text_search = true
然后重启进程即可</code></pre>


<p>开启全文检索下图所示，会多出一个标签卡可切换到全文检索功能。</p>
<p><img alt="1589787086178" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787086178.png" /></p><h1 id="_1">业务拓扑</h1>
<p>业务拓扑是配置平台进行主机管理的基础，在业务架构以及类型越来越复杂的今天，只有建立合适的业务模型，才能结构化的管理好主机。配置平台提供用户结构自定义、拓扑属性自定义等功能。</p>
<h2 id="_2">创建拓扑</h2>
<p>默认情况下，业务拓扑仅包含空闲模块，您可以通过点击业务右后方的新建功能，创建符合场景的拓扑结构。默认 “业务-集群-模块”三级的拓扑结构含义如下：</p>
<ul>
<li>集群（SET）：功能较为完整的部署板块，内部强耦合，对外弱耦合。即集群之间仅有较少依赖，一个集群故障不影响其他集群的正常运行</li>
<li>模块（MODULE）：完整的一个服务模块，例如 web 模块、db 模块等。模块下可以进一步定义服务实例、进程资源</li>
</ul>
<p>我们提供了集群模版、服务模版分配便于用户快速创建集群、模块，详情查看服务模版，集群模版章节。对于没有特别规律的集群和模块，您可以选择不使用模版创建，后续的维护都通过手动调整每个层级节点完成。</p>
<p><img alt="1579158593792" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579158593792.png" />
<center>图1.创建拓扑</center></p>
<h2 id="_3">自定义层级</h2>
<p>除了系统默认包含的两层结构，用户可以根据企业的实际需要，在“模型-模型关系”中定义更多层级。</p><h1 id="_1">服务模版</h1>
<p>服务模板可以预定义业务通用的服务，用于业务拓扑中批量部署和变更服务实例。也可以简单的理解为业务拓扑中的模块模版。</p>
<h2 id="_2">创建服务模版</h2>
<p>进入到“业务-服务模版”，可以看到当前已存在的服务模版。点击“新建”按钮进入新建服务模版配置页。</p>
<p><img alt="1581925106522" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581925106522.png" />
<center>图1：服务模版列表</center></p>
<p>配置服务模版包含以下信息：</p>
<ul>
<li>模版名称：服务模版的唯一标识，在通过服务模版创建的模块会使用模版的同一个名称。命名方法建议以简单可理解的功能性单词，比如 test_db, erp_db 等</li>
<li>服务分类：表示此模版所属的服务类型，系统提供了常见的一些服务类型，例如 mysql、apache 等，用户也可以自定义增加业务特有服务分类</li>
<li>服务进程：进程是服务的重要组成。进程的关键属性主要有进程名称和进程别名，进程名称是进程的二进制名称，进程别名是进程的可读名称。比如 apche 的实际运行二进制名称是 java，如果填写 java 在周边系统中是无法识别这个进程的实际作用，因此这种情况下，可以填写进程名称为 java，进程别名为 tomcat。服务进程中还有其他信息，例如监听端口、监听 IP 等，可以根据实际场景的需要填写</li>
</ul>
<p><img alt="1581925661317" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581925661317.png" />
<center>图2：创建服务模版</center></p>
<p>服务模版创建完成以后，可以在列表中查询到此记录，应用服务模版。</p>
<p><img alt="1581926580549" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581926580549.png" />
<center>图3：服务模版列表</center></p>
<h2 id="_3">使用服务模版</h2>
<p>进入到“业务-业务拓扑”中，在左侧的拓扑树中先创建“集群”，在“集群”中创建“模块”的时候，可以看到在上个步骤中已存在的服务模版。</p>
<p><img alt="1581928555647" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581928555647.png" />
<center>图4：服务模版列表</center></p>
<p>创建了模块以后，有两种方式创建服务实例，这两种方法是等效的，根据主机或服务实例的管理习惯选择即可。</p>
<p><strong>方式 1：当主机转移到当前模块下，系统会自动创建服务实例。</strong></p>
<p><img alt="1581928809924" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581928809924.png" />
<center>图5：模块中加入主机</center></p>
<p><strong>方式 2：主动创建服务实例，主机也会归属到当前模块下。</strong></p>
<p><img alt="1581928770061" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581928770061.png" />
<center>图5：创建服务实例</center></p>
<h2 id="_4">模版同步</h2>
<p>当服务模版发生变化以后，可以通过“同步”功能把改动同步到服务实例中。</p>
<p><img alt="1581929521663" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581929521663.png" />
<center>图6：查看服务模版已经应用的模块</center></p>
<p><img alt="1581929561151" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581929561151.png" />
<center>图7：同步服务实例并确认</center></p>
<h2 id="_5">模版删除</h2>
<p>为了保证配置的安全和准确，删除服务模版时会校验是否存在模块与其关联。即删除之前应该先把所有应用了模版的实例清除。</p><h1 id="_1">集群模版</h1>
<p>集群模板可以定义业务通用的集群结构，用于<a href="./BusinessTopology.md">业务拓扑</a>中快速部署和维护集群。此功能依赖已经存在<a href="./ServiceTemp.md">服务模板</a>。</p>
<h2 id="_2">创建集群模版</h2>
<p>进入“业务-集群模版”，点击“创建”新建集群模版。</p>
<p><img alt="1581930103417" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581930103417.png" />
<center>图1：开始集群模版</center></p>
<p>集群模版主要有两个信息：</p>
<ul>
<li>模版名称：集群模版的标识，在使用的时候可以识别即可</li>
<li>集群拓扑：集群由哪些模块服务模版构成。在实际使用中，会根据服务模版创建模块实例</li>
</ul>
<p><img alt="1581930276733" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581930276733.png" />
<center>图2：新建集群模版</center></p>
<p><img alt="1581930447405" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581930447405.png" />
<center>图3：查看集群模版列表</center></p>
<h2 id="_3">使用集群模版</h2>
<p>进入到“业务-业务拓扑”，创建集群的时候，选择从模版创建，补充集群名称即可。</p>
<p><img alt="1581931697448" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581931697448.png" />
<center>图4：使用集群模版创建集群</center></p>
<p>创建业务完成以后，可以看到在业务下已经创建了包含模块的拓扑，用户可以直接分配主机到拓扑中。</p>
<p><img alt="1581932223130" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581932223130.png" />
<center>图5：完成创建集群</center></p>
<h2 id="_4">同步</h2>
<p>集群模版的结构发生变化后，可以通过同步功能批量更新到集群实例中。</p>
<p>需要注意的是，同步操作是异步进行，在同步完成前，尽可能不要对当前集群做变更。</p>
<p><img alt="1581932601727" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581932601727.png" />
<center>图6：修改集群模版成功</center></p>
<p><img alt="1581932640006" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581932640006.png" />
<center>图7：同步集群模版</center></p>
<p><img alt="1581932657282" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581932657282.png" />
<center>图8：同步集群模版确认</center></p>
<h2 id="_5">删除</h2>
<p>为了保证配置的安全和准确，集群模版的删除，需要先清理已存在的关联集群。</p><h1 id="_1">服务分类</h1>
<p>服务分类可以帮助业务梳理服务用途。配置平台初始化包含一些常见的分类，并支持根据业务拓展更多分类。</p>
<h2 id="_2">查看当前服务分类</h2>
<p>进入“业务-服务分类”可以查看到当前已有的服务分类。</p>
<p>服务分类有两种，内置或者是用户自定义。内置服务分类在业务管理中，不可以修改或者删除。</p>
<p><img alt="1581941471606" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581941471606.png" />
<center>图1：服务分类查询</center></p>
<h2 id="_3">新建服务分类</h2>
<p>在业务管理中，用户可以创建业务特有的服务分类。即跨业务服务分类名称可以重复。</p>
<p>点击虚线框，创建第一个级别的分类。</p>
<p><img alt="1581941554196" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581941554196.png" />
<center>图2：新建一级分类</center></p>
<p>然后点击右上角的更多，新增第二个级别分类。需要注意的是，只有第二级的分类才可以配置到服务模版或模块中。</p>
<p><img alt="1581941602044" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581941602044.png" />
<center>图3：新建二级分类</center></p>
<h2 id="_4">编辑/删除服务分类</h2>
<p>鼠标悬停在服务分类上，可以看到服务分类的编辑删除操作。</p>
<p><img alt="1581941760634" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581941760634.png" />
<center>图4：编辑、删除服务分类</center></p><h1 id="_1">主机自动应用</h1>
<p>主要用于配置主机属性的自动应用。即主机发生转移或新加入模块，会根据目标模块的策略自动触发修改主机属性。</p>
<h2 id="_2">启用自动应用</h2>
<p>进入到“业务-主机自动应用”，选择需要配置的模块（支持选择空闲机或者普通的业务模块），点击右侧的“立即启用”。</p>
<p><img alt="1581933260459" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581933260459.png" />
<center>图1：启用自动应用</center></p>
<p>启动自动应用有两个步骤。</p>
<h3 id="_3">步骤一：配置自动应用的属性</h3>
<p><img alt="1581933639363" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581933639363.png" />
<center>图2：选择需要配置自动应用的属性</center></p>
<p><img alt="1581933679585" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581933679585.png" />
<center>图3：配置自动应用属性</center></p>
<h3 id="_4">步骤二：现存主机属性修改为自动应用配置</h3>
<p>此步骤会把当前模块中所有主机与配置的属性设定为一致，列表中显示了哪些主机的属性需要修改。</p>
<p>需要注意的是，第二个步骤执行完成，策略才能够保存，中途退出策略的配置会被丢弃。</p>
<p><img alt="1581933693621" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581933693621.png" />
<center>图4：应用到现有主机</center></p>
<p><img alt="1581934046098" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581934046098.png" />
<center>图5：策略保存成功</center></p>
<p>自动应用策略配置成功以后，当主机新增到当前模块，会自动应用配置的属性（此案例中会把主要负责人和备份负责人设定为 admin）。</p>
<h2 id="_5">关闭自动应用</h2>
<p>自动应用策略已经生效时，可以在左侧的拓扑中看到对应模块后有一个绿色的对号。</p>
<p>当模块不再需要自动配置的特性时候，点击拓扑树上对应的模块，然后点击关闭。</p>
<p><img alt="1581940728095" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581940728095.png" />
<center>图6：关闭自动应用</center></p>
<p>这时候会弹出一个提示框，是否保存当前的配置项，如果只是临时关闭，可以选择保存，后续需要应用的时候再启用，之前的配置过的属性就不需要重复选择和填写。如果是不再需要配置，选择不保存即可，下次再次开启，从零开始配置。</p>
<p>关闭自动应用的时候，已经存在当前模块的主机属性不会发生变动。</p>
<p>此外在关闭状态，无论是否保存了之前的配置，主机移入当前模块，属性不会发生改变。</p>
<p><img alt="1581941199534" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1581941199534.png" />
<center>图7：关闭自动应用确认</center></p><h1 id="_1">动态分组</h1>
<p>动态分组可对同类的资源会设定一个聚合组以在不同的场景中方便通用，例如所有归属于 admin 维护的主机、动态分组依据查询条件帮用户管理这种聚合，当符合条件的资源增加或者减少，动态分组查询的结果也会随之动态改变。目前动态分组已经可以在作业平台、标准运维等系统中使用。 </p>
<h2 id="_2">动态分组管理</h2>
<p>进入到“业务-动态分组”功能，可以看到当前已经存在的动态分组列表。可以预览、编辑删除已存在分组。</p>
<p><img alt="1579160010918" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579160010918.png" />
<center>图1.动态分组</center></p>
<h2 id="_3">新建主机动态分组</h2>
<p>点击“新增”增加一个动态分组，“分组名称”便于快速识别分组用途，“查询条件”是指需要对集群、模块还是主机的哪些属性进行查询。</p>
<p>灵活的查询条件，我们很容易配置出例如“所有 Linux 主机”、“所有 admin 负责的主机”等场景的动态分组查询。</p>
<p><img alt="image-20201103124406106" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CustomQuery/image-20201103124406106.png" />
<center>图2.新建动态分组</center></p>
<h2 id="_4">新建集群动态分组</h2>
<p>点击新增动态分组，切换查询对象到“集群”，可以创建一个查询目标为“集群”的动态分组。</p>
<p><img alt="image-20201103124543940" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CustomQuery/image-20201103124543940.png" /></p><h1 id="_1">自定义字段</h1>
<p>您可以根据业务的特性，为业务的每个层级设定必要的字段。</p>
<p>进入“业务-自定义字段”功能，可以用看到当前集群、模块、主机已经存在的字段信息，先创建一个业务分组。</p>
<ul>
<li>分组的默认折叠：当自定义的业务字段并非必填，希望能够尽可能减少打扰，可以打开默认折叠。在编辑、创建节点的时候，将看不到这个分组的属性，需要主动展开编辑。</li>
</ul>
<p><img alt="1579159515249" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579159515249.png" />
<center>图1.自定义分组</center></p>
<p>分组创建完成以后，可以进入创建自定义字段的页面，这里的操作与全局模型配置中一致，需要注意的是唯一标识和名称不可以与现有字段重复。</p>
<p><img alt="1579159807036" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579159807036.png" />
<center>图2.新建字段</center></p><h1 id="_1">资源目录</h1>
<p>资源目录包含 CMDB 中所有实例数据，初始化只包含了少量实例功能，您可以根据企业的需要，预先<a href="Model.md">定义模型</a>后即可通过资源目录进行数据的录入和维护。</p>
<p>在资源目录页，可以通过点击“星状”按钮把常见实例收藏到左侧导航条中，以方便日常快速访问。</p>
<p><img alt="image-20201105114739040" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/Instance/image-20201105114739040.png" />
<center>图2.创建实例</center></p>
<h2 id="_2">新增实例</h2>
<p>模型创建以后，在资源目录中都会新增一个实例管理入口。进入到实例管理页后，可以通过点击“新建”或者“导入”创建实例。</p>
<p><img alt="image-20201105114814110" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/Instance/image-20201105114814110.png" />
<center>图2.创建实例</center></p>
<h2 id="_3">实例编辑、删除</h2>
<p>通过点击实例列表，可以展开实例的查看页面，在此页面中，可以对实例进行编辑和删除。</p>
<p><img alt="image-20201105114852856" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/Instance/image-20201105114852856.png" />
<center>图3.实例编辑</center></p>
<h2 id="_4">实例关联关系查看</h2>
<p>如果在模型配置中有配置关联关系，在“关联”标签中，可以查看到关联的拓扑图。</p>
<p><img alt="image-20201105114908857" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/Instance/image-20201105114908857.png" />
<center>图4.关联关系</center></p>
<p>新增和编辑关联关系可以通过点击“新增关联”完成。</p>
<p><img alt="image-20201105114931914" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/Instance/image-20201105114931914.png" /></p><h1 id="_1">业务管理</h1>
<p>业务是蓝鲸 CD 体系中比较重要的概念，日常使用中主机、进程、业务拓扑的管理都需要依赖已经存在业务。</p>
<p><img alt="1579072866404" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579072866404.png" />
<center>图1.业务管理</center></p>
<h2 id="_2">创建新的业务</h2>
<p>当拓扑形态、管理模式、部署区域或者管理人员有比较大的区别的时，建议创建一个新的业务，使用业务隔离相关资源的使用和权限。</p>
<p>新建业务的一些关键属性解释：</p>
<ul>
<li>业务名：用于识别业务的名称</li>
<li>生命周期：用于标识当前业务的运营阶段。</li>
<li>时区：蓝鲸支持跨国管控，在监控场景和数据挖掘场景等要求配置业务正确的时区</li>
<li>语言：在 SaaS 场景中，会根据配置发送不同语言的通知</li>
<li>运维人员：在 CD 大场景中，运维通常被认为是业务的管理者，所以在业务中运维为必填属性</li>
</ul>
<p><img alt="1579073496488" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579073496488.png" />
<center>图2.新建业务</center></p>
<h2 id="_3">蓝鲸业务</h2>
<p>在蓝鲸搭建以后，会自动创建“蓝鲸”业务，初始化了蓝鲸自身的模块、进程分布情况，此业务可以用于监控、扩缩容等操作，业务不可以被删除。</p><h1 id="_1">主机和资源池</h1>
<p>主机实例是 CMDB 中比较重要的对象之一，系统内置了“资源池”，即未分配到业务的主机。导入的新主机，默认进入到资源池中。</p>
<p><img alt="image-20201103122840545" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103122840545.png" />
<center>图1.主机资源池</center></p>
<h2 id="_2">主机录入</h2>
<p>目前在配置平台录入主机有两种方法：</p>
<ul>
<li>Excel 批量导入</li>
<li>蓝鲸 Agent 安装应用进行导入</li>
</ul>
<h3 id="excel">Excel 批量导入</h3>
<p>点击“下载模版”，可以下载到符合格式好的 Excel 文档。</p>
<p><img alt="image-20201103122940603" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103122940603.png" />
<center>图2.下载模版</center></p>
<p>打开 Excel 文档以后，前三行为系统标识，第四行以后每行为一条记录。</p>
<ul>
<li>标注红色为必填字段，其他字段可以留空</li>
<li>其他字段根据模型中的字段顺序排列</li>
</ul>
<blockquote>
<p>注意的是：录入同样内网 IP，是属性覆盖的操作，可以使用此特性对主机属性进行批量更新。</p>
</blockquote>
<p><img alt="1589787730008" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787730008.png" />
<center>图3.Excel字段说明</center></p>
<h3 id="agent">Agent 应用导入</h3>
<p>切换到自动导入的 Tab 页，通过跳转到链接可以打开“Agent 安装”应用，通过安装了蓝鲸的 Agent，相关主机会自动录入到配置平台的资源池中。</p>
<p><img alt="image-20201103122958347" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103122958347.png" />
<center>图4.自动导入</center></p>
<h2 id="_3">资源分配到业务</h2>
<p>先选中要分配主机，点击分配到按钮，选择业务后可以完成主机资源的分配，默认是放到业务的空闲机池。</p>
<p><img alt="image-20201103123038974" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103123038974.png" />
<center>图5.分配到业务</center></p>
<h2 id="_4">资源池目录管理</h2>
<p>公司内不同的部门，业务对于主机资源的管理可能有所不同，我们可以通过创建资源池目录的方式，隔离各个不同团队的资源，避免混用。</p>
<h3 id="_5">创建资源池目录</h3>
<p>点击创建目录按钮，输入资源池名称后回车完成创建，需要注意的是，资源池的目录名称是其唯一标识不允许重复。</p>
<p><img alt="image-20201103123450420" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103123450420.png" /></p>
<h3 id="_6">资源池目录管理</h3>
<p>资源池的目录编辑删除可以通过点击其后的“更多”按钮进行操作，需要注意的是，当资源池下没有任何资源的时候，才可以删除此目录。</p>
<p><img alt="image-20201103123553263" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103123553263.png" /></p>
<h3 id="_7">资源池目录导入主机</h3>
<p>把主机导入到资源池的目录有两种方式：直接导入和通过资源池目录转移。</p>
<h4 id="_8">直接导入</h4>
<p>导入主机的时候，注意选择需要导入的目标目录即可。</p>
<p><img alt="image-20201103123846112" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103123846112.png" /></p>
<h4 id="_9">通过资源池目录转移</h4>
<p>也可以通过从其他资源池目录转移主机资源到当前目录下。勾选要操作的资源以后，选择“分配到”-“资源池其他目录”，可以把当前选中的资源转移到当前目录。</p>
<p><img alt="image-20201103124014328" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/ResourcePool/image-20201103124014328.png" /></p><h1 id="_1">云资源</h1>
<p>配置平台提供了一套基础云资源同步功能，以解决云资源的管理更新不及时，信息不准确等问题。</p>
<p>具体步骤为：</p>
<ol>
<li>创建云账户</li>
<li>创建云资源发现任务</li>
<li>分配云资源</li>
</ol>
<h2 id="1">1. 创建云账户</h2>
<p>用户需先在公有云申请创建一组可访问所有资源的“子账户”。不同公有云申请方式略有差异。目前配置平台支持腾讯云和 AWS 的账号同步能力，相关的账户申请方式可以参考以下文档：</p>
<ul>
<li>腾讯云：<a href="https://cloud.tencent.com/document/product/598/37140">https://cloud.tencent.com/document/product/598/37140</a></li>
<li>AWS：<a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html">https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html</a></li>
</ul>
<p>申请创建了账户以后，需要记录访问的 ID 和 KEY，在配置平台中创建账户。</p>
<p><img alt="image-20201103145902897" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CloudResource/image-20201103145902897.png" /></p>
<p>填写了 ID 和 KEY 以后，点击“连通测试”按钮，以确保配置平台可以正常访问公有云的接口地址，同时校验 ID 和 KEY 的可用性。</p>
<p><img alt="image-20201103150038696" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CloudResource/image-20201103150038696.png" /></p>
<p>创建账户成功以后，我们接下来可以去创建云资源发现任务。</p>
<p><img alt="image-20201103150214547" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CloudResource/image-20201103150214547.png" /></p>
<h2 id="2">2. 创建云资源发现任务</h2>
<p>进入“云资源发现”功能，点击“新建”按钮，选择刚刚创建的腾讯云账户。</p>
<p><img alt="image-20201103150408059" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CloudResource/image-20201103150408059.png" /></p>
<p>目前支持按照 VPC 的粒度同步主机资源，通过选择公有云的区域，找到需要同步的 VPC。</p>
<p><img alt="image-20201103150908555" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CloudResource/image-20201103150908555.png" /></p>
<p>在云区域设定中完善设置：</p>
<ol>
<li>补充 VPC 对应的云区域名称：公有云一个 VPC 内主机 IP 资源不重复，与配置平台中云区域是一一对应的关系。后续此 VPC 下公有云资源都会同步到此 VPC 中</li>
<li>设定云主机录入到资源池的目录：配置平台发现一台新云主机，会优先放置到资源池的目录下，默认在“空闲机”目录。用户也可根据实际的部门或者用途划分，创建一个目录专用于存储新增的云主机资源</li>
</ol>
<p><img alt="image-20201103151136751" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CloudResource/image-20201103151136751.png" /></p>
<p>创建完成会立刻启动一次同步任务，可以在列表中看到同步状态。</p>
<p><img alt="image-20201103151830674" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/CloudResource/image-20201103151830674.png" /></p>
<h2 id="3">3. 分配云资源</h2>
<p>公有云上的主机资源会被同步到资源池的设定目录中，通过“分配到”功能分配到实际的业务中应用。</p>
<p>详细操作可以参考 <a href="./ResourcePool.md">主机和资源池管理</a></p><h1 id="_1">事件推送</h1>
<p>事件推送功能能够实现当配置信息发生变化的时候，实时同步到关联的系统中，目前支持 http 的推送方式 。此功能需要配合第三方 SaaS 开发实现。</p>
<p>进入“资源 – 事件订阅”可以看到当前存在的推送列表。在新增推送中，可以定义对特定的模型、特定动作进行事件订阅。</p>
<p><img alt="1579158286725" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579158286725.png" />
<center>图1.事件订阅</center></p><h1 id="_1">模型管理</h1>
<p>配置平台中管理的信息实例，均是基于模型构造而成。</p>
<p>目前内置的模型有业务、集群、模块、主机、进程、云区域。</p>
<p>如果内置模型不能够满足，可以通过自定义新增、编辑模型，从而构造出企业特有的 CMDB。</p>
<h2 id="_2">现有模型查看</h2>
<p>管理员可以通过“模型 - 模型管理”中查看到当前系统中存在的所有模型。</p>
<p><img alt="1589787478342" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787478342.png" />
<center>图1.现有模型查看</center></p>
<h2 id="_3">模型分组</h2>
<p>系统支持对模型按照使用的功能进行分组。分组类型分为“系统内置”和“用户自定义”。</p>
<ol>
<li>
<p>系统内置分组：目前包含“主机管理”、“业务拓扑”、“组织构架”和“网络”。内置分组不可以修改和删除</p>
</li>
<li>
<p>用户自定义分组：可以通过侧边的新增按钮进行新增。如需修改已有自定义分组，可以通过鼠标悬停在分组名称上，然后点击修改按钮</p>
</li>
</ol>
<p><img alt="1589787511829" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787511829.png" />
<center>图2.新增分组</center></p>
<p><img alt="1589787564934" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787564934.png" />
<center>图3.编辑/删除分组</center></p>
<h2 id="_4">模型创建</h2>
<p>在新增的分组面板中，点击“立即创建”打开创建一个新的模型。</p>
<ul>
<li>所属分组：模型的管理分组，可以让模型分类更加清晰易于检索，后续版本将会支持根据分组设定权限</li>
<li>唯一标识：模型的在系统中的唯一标识，不可以重复，新建以后将不可修改，主要用于 API 的识别和调用</li>
<li>名称：模型的在视图上的可见名称，建议尽命名可能简洁易懂</li>
</ul>
<p><img alt="1589787596950" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787596950.png" />
<center>图4.新增模型</center></p>
<p>模型创建成功以后，进入模型的查看页面，可以发现当前模型已经自动创建了：</p>
<ul>
<li>字段分组“default”，这是一个内置分组不可删除，可以修改名称</li>
<li>字段“实例名”，这是一个必填字段，在系统需要简写的场景，CMDB 会优先显示此字段以便于用户快速识别当前设备的用途或者归属</li>
</ul>
<p>接下来可以通过点击“添加”按钮增加更多字段。</p>
<p><img alt="1589787626775" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1589787626775.png" />
<center>图5.新增字段</center></p>
<p>目前支持已经支持的字段类型如下：</p>
<ul>
<li>短字符：长度 256 个英文字符或 85 个中文字符</li>
<li>长字符：长度 2000 英文或 666 个中文字符</li>
<li>数字：正负整数</li>
<li>浮点数：可以包含小数点的数字</li>
<li>枚举：包含 K-V 结构的列表</li>
<li>日期：日期格式</li>
<li>时间：时间格式</li>
<li>时区：国际时区的枚举</li>
<li>用户：可以输入蓝鲸中已经录入的用户</li>
<li>布尔：布尔类型，常用于开关</li>
<li>列表：可以理解为数组类型，只包含值的列表</li>
</ul>
<p><img alt="1578995270512" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1578995270512.png" />
<center>图6.字段类型</center></p>
<p>不同的字符类型有对应的配置选项，含义如下：</p>
<ul>
<li>可编辑：当前字段仅在初始创建和导入的时候可以编辑，在系统中不可修改</li>
<li>必填：当前字段必须填写</li>
<li>正则校验：字符类型的字段可以填写正则表达式，以保证录入数据格式准确，常用于邮箱、手机号码等内容</li>
<li>最大、最小值：数字类型可以设定支持的数字范围</li>
<li>枚举值：枚举类型中设定枚举可选项，ID 是用户不可见，值为用户可见选项</li>
<li>列表值：列表类型中设定列表可选项</li>
<li>默认值：默认值是枚举和列表类型用于设定用户如果没有填写，使用哪个作为默认输入</li>
<li>用户提示：提供给用户描述 tips，一般哦用于指导如何填写当前字段</li>
</ul>
<h2 id="_5">字段的布局调整</h2>
<p>您可以通过以下方式让实例的详情查询、编辑页面更加友好：</p>
<ol>
<li>调整字段分组顺序</li>
<li>拖动移动字段顺序</li>
</ol>
<p><img alt="1578996369582" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1578996369582.png" />
<center>图7.字段布局</center></p>
<h2 id="_6">唯一校验</h2>
<p>为了保证配置平台录入的实例数据正确有效，唯一校验可以在录入前做好校验防护，避免出现重复数据。</p>
<h3 id="_7">默认校验</h3>
<p>默认情况下，自定义的模型会以“实例名”作为唯一校验。即如果输入了重复的实例名称，系统会拒绝录入并提示数据从服务。默认校验有以下特性：</p>
<ol>
<li>不可以被删除</li>
<li>默认校验必须不为空，即使当前字段没有设定为“必填”，在录入的时候也会被要求一定要填写</li>
</ol>
<p>您可以修改默认校验为模型中已经存在的其他字符、数字类型字段，例如改为“固资编号”、“设备 SN”、“MAC 地址”等。也可以修改为多个字段联合作为唯一校验，常见的场景有：“区域+区域唯一标识”。</p>
<p><img alt="1578997030459" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1578997030459.png" />
<center>图8.可选校验</center></p>
<p>除了默认校验，可以创建多组辅助校验规则以让实例的录入更严谨，辅助校验的字段如果未设定为必填，在录入的时候如果为空则不会校验。如果希望辅助校验也能够同默认校验一样，需要在字段属性中把字段设置为必填。</p>
<h2 id="_8">模型删除</h2>
<p>删除模型：在模型的详情页面，可以通过右上角的“删除”功能完全删掉当前模型设定。需要注意的是为了尽可能减少误删除情况，删除模型请求时候系统会先确认对应实例已经清空。</p>
<p><img alt="1578995759867" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1578995759867.png" />
<center>图9.模型删除</center></p>
<h2 id="_9">模型停用</h2>
<ol>
<li>
<p>禁用模型：如果只是暂时不启用，可以使用右上角的停用功能，与删除不同的是，禁用仅会隐藏系统的显示，数据均会保留</p>
</li>
<li>
<p>启用模型：模型被禁用以后，可以通过在模型管理中，切换到已停用标签，找到当前禁用模型，重新启用以后，原有的实例和关联关系都会重新恢复显示</p>
</li>
</ol>
<p><img alt="1578996121612" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1578996121612.png" />
<center>图10.模型启用</center></p><h1 id="_1">模型关系</h1>
<p>在真实的 CMDB 管理中，数据之间天然存在关系。模型关系功能可以定义模型之间是如何关联。</p>
<p><img alt="1579054176310" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579054176310.png" />
<center>图1.模型关系视图</center></p>
<h2 id="_2">基础视图操作</h2>
<p>进入到“模型-模型关系”功能，默认会显示当前 CMDB 所有的模型和关系配置图，点击左侧分组列表可以快速聚焦到当前分组下的模型。</p>
<p><img alt="1579057199154" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579057199154.png" />
<center>图2.切换到分组视图</center></p>
<p>点击模型或模型分组的后的隐藏按钮，可以隐藏部分不常用的模型。</p>
<p><img alt="1579057316494" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579057316494.png" />
<center>图3.隐藏模型分组</center></p>
<h2 id="_3">新建模型关系</h2>
<p>进入到“模型-模型关系”功能，点击“编辑拓扑”按钮进入编辑模式，此时鼠标悬停在模型上会出现创建关联关系功能，选中另外一个模型以后出现新建关联对话框。选择合适的关联类型和约束方式即可创建一组模型关联。相关描述如下：</p>
<ul>
<li>源模型-目标模型：模型之间的关系有方向属性，视图上以箭头方向区分。默认情况下指针从源模型指向目标模型。您也可以在关联类型中调整指向方式</li>
<li>关联类型：系统自带常见的几种关联类型“属于”、“组成”、“运行”、“上联”、“默认”</li>
<li>目标约束：默认为 N-N，一个源实例可以关联多个目标实例，任意一个目标实例也可以被多个源实例关联。1-N 约束含义是一个源实例可以关联任意多个目标实例，但目标实例如果已经被源关联后，不可以再关联其他源实例。1-1 约束含义是一个源实例只可以关联一个目标实例，一个目标实例也只可以关联一个源实例</li>
<li>关联描述：当前关系的别名，以便用户识别</li>
</ul>
<p><img alt="1579056952798" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579056952798.png" />
<center>图4.编辑模式</center></p>
<p><img alt="1579057463124" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579057463124.png" />
<center>图5.可视化创建关联</center></p>
<p><img alt="1579058241668" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579058241668.png" />
<center>图6.新建关联确认</center></p>
<h2 id="_4">删除建模型关系</h2>
<p>在编辑模式下，再次点击关联关系，可以查看或删除当前关联。</p>
<p>需要注意的是，为了保障系统的基础功能，部分内置关联不可以删除和修改。</p>
<h2 id="_5">模型管理中创建关系</h2>
<p>当模型数量过多，视图中并不便于操作的时候，您可以在“模型-模型管理”找到对应模型，切换到模型关系标签创建关联。</p>
<p><img alt="1579058537897" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579058537897.png" />
<center>图7.新建关联确认</center></p><h1 id="_1">关联类型</h1>
<p>在通常情况下，企业中的模型关联可以进行分类，例如网络设备与主机之间的关系为关联。对关联进行分类以后，能够更加便捷创建修改模型关联、查询同类关联。</p>
<p>出厂默认自带几种关联类型：</p>
<ul>
<li>属于：常用与组织或管理层级的连接</li>
<li>组成：设备部件和整体之间的连接</li>
<li>拓扑组成：系统内置类型，仅用于业务拓扑的节点关系，仅限系统使用</li>
<li>运行：程序与操作系统之间的连接</li>
<li>上联：常用与网络设备之间的连接</li>
<li>默认关联：从早于配置平台 3.2 升级上来的关联会自动对应到默认关联</li>
</ul>
<p><img alt="1579059179277" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579059179277.png" />
<center>图1.关联类型</center></p>
<h2 id="_2">新建关联类型</h2>
<p>进入到“模型-关联类型”功能点击“新建”按钮，在对话框中填入关联类型相关信息：</p>
<ul>
<li>唯一标识：英文字符建议尽可能简短可识别，在关联的导入、API 的查询中需要使用此标识</li>
<li>名称：呈现给用户的名称</li>
<li>源-&gt;目标描述：在源实例查看关系的时候，显示的描述</li>
<li>目标-&gt;源描述：在目标实例查看关系的时候，显示的描述</li>
<li>是否有方向：视图中是否显示方向，默认为源指向目标</li>
</ul>
<p><img alt="1579059161095" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579059161095.png" />
<center>图2.新建关联类型</center></p><h1 id="_1">操作审计</h1>
<p>操作审计用于追溯在配置平台上的实例操作。</p>
<p><img alt="1579069239815" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579069239815.png" />
<center>图1.操作审计</center></p><h1 id="_1">运营统计</h1>
<p>运营统计可以对 CMDB 的实例资源进行可视化统计，</p>
<p>运营统计功能从上到下分为三个板块：</p>
<ul>
<li>常用指标总览：CMDB 重要的数值统计，目前支持业务数、主机数、模型数、实例数</li>
<li>主机统计：主机是 CMDB 一个重要模型对象，默认包含一些常用统计纬度：系统类型统计、业务统计、云区域统计、变化趋势统计</li>
<li>实例统计：除了主机之外其他实例的统计</li>
</ul>
<p><img alt="1579069977699" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579069977699.png" />
<center>图1.运营统计</center></p>
<p>当前支持两种类型“内置”和“自定义图表”，点击板块名称后的“+”按钮，可以进入新建图表对话框。</p>
<ul>
<li>内置图表：常用或者较为复杂的统计，系统已经设定好表现形式和纬度，用户可以定义图表的大小。图表被删除以后可以通过“新增-内置”找回</li>
<li>自定义图表：允许用户对任意模型，以“枚举字段”作为统计纬度作出统计图表，图表类型支持饼图和柱状图</li>
</ul>
<p><img alt="1579072666213" src="F:\v_awjliu\BKDocs\ZH/6.0/配置平台/产品白皮书/media/1579072666213.png" />
<center>图2.新增主机统计图表</center></p><h1 id="_1">结语</h1>
<p>蓝鲸基于 Golang 全新重构了蓝鲸配置平台，相对于之前的配置平台（CMDB2.0） 提供了全新的机器数据快照、数据自动发现、变更事件主动推送、更加精细的权限管理、可拓展的业务拓扑等功能；系统的运行效率得到较大提升的同时，采用了服务化、去中心化的架构设计，使得系统的部署发布可以支持传统方式和容器方式。</p>
<p>新版蓝鲸配置平台已正式对外开源。</p>
<p>GitHub 地址： <a href="https://github.com/Tencent/bk-cmdb">https://github.com/Tencent/bk-cmdb</a></p>
    </body>
    </html>
    